package com.krubi.model;

import static javax.persistence.GenerationType.IDENTITY;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "usuarios")
@NamedQueries( { @NamedQuery(name = Usuario.BUSCAR_POR_NOMBRE_DE_USUARIO, query = "from Usuario u where u.nombre = :nombre"),
				@NamedQuery(name = Usuario.BORRAR_POR_NOMBRE_DE_USUARIO, query = "delete from Usuario u where u.nombre = :nombre")})
public class Usuario
{
	@Id
	@Column(name="id", unique=true, nullable=false )
	@GeneratedValue( strategy = IDENTITY )
	private long id;
	
	@Column(name="nombre", unique=true, nullable=false )
	private String nombre;

	@Column(name="clave", nullable=false )
	private String clave;
	
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "id_persona")
	private Persona persona;

	@Column(name="habilitado", nullable=false )
	private Boolean habilitado;
	
	@ManyToMany(mappedBy="usuarios", 
			targetEntity=GrupoUsuarios.class,
			cascade={CascadeType.PERSIST, CascadeType.MERGE})
	private List<GrupoUsuarios> gruposUsuarios;
		
	public static final String BUSCAR_POR_NOMBRE_DE_USUARIO = "Usuario.buscarPorNombreDeUsuario";
	
	public static final String BORRAR_POR_NOMBRE_DE_USUARIO = "Usuario.borrarUsuarioPorNombreDeUsuario";
	
	public static final String BORRAR_POR_EMAIL = "Usuario.borrarUsuarioPorEmail";
	
	public long getId() 
	{
		return id;
	}

	public void setId(long pId) 
	{
		id = pId;
	}

	public String getNombre()
	{
		return nombre;
	}

	public void setNombre(String pNombre) 
	{
		nombre = pNombre;
	}

	public String getClave() 
	{
		return clave;
	}

	public void setClave(String pClave)
	{
		clave = pClave;
	}
	
	public Persona getPersona() 
	{
		return persona;
	}

	public void setPersona(Persona pPersona) 
	{
		persona = pPersona;
	}

	public Boolean getHabilitado()
	{
		return habilitado;
	}

	public void setHabilitado(Boolean pHabilitado) 
	{
		habilitado = pHabilitado;
	}

	
	public List<GrupoUsuarios> getGruposUsuarios() 
	{
		return gruposUsuarios;
	}

	public void setGruposUsuarios(List<GrupoUsuarios> pGruposUsuarios) 
	{
		gruposUsuarios = pGruposUsuarios;
	}
	
}
